/*
File : Main.cpp
-------------------
| Hello |
| World ! |
-------------------
*/
/* ----------------------------------- DEFINE HERE --------------------------------------*/
#include "bits/stdc++.h"
#include <unordered_map>
using namespace std;
#define mii map<int,int>
#define vi vector<int>
#define vs vector<string>
#define vb vector<bool>
#define pii pair<int,int>
#define endl "\n"
#define sip(s) string s; cin>>s
#define ip(x) int x; cin>>x;
#define inp(x,y) int x,y; cin>>x>>y;
#define iput(a,b,c) int a,b,c; cin>>a>>b>>c
#define input(a,n) for(int i=0;i<n;i++) cin>>a[i]
#define intmax INT_MAX
#define intmin INT_MIN
#define int long long int
#define need_for_speed ios_base::sync_with_stdio(false); cin.tie(NULL);
#define ff(i,a,b) for(int i=a;i<b;i++)
#define rfor(i,a,b) for(int i=a;i>=b;i--)
#define all(x) x.begin(),x.end()
#define forauto(it,arr) for(auto it:arr)
#define prauto(arr) for(auto it:arr) cout<<it<<" "; cout<<"\n";
#define pt(x) { cout<<x<<"\n"; }
#define fs first.second
#define ss second.second
#define pb push_back
#define sc second
#define vpii vector<pii>
#define yesno(ok) cout << (ok ? "YES" : "NO") << '\n';
/* ----------------------------------- GLOBAL'S --------------------------------------*/
/* ----------------------------------- OTHER FUNC'S --------------------------------------*/
/* --------------------------------------- SOLVE -----------------------------------------*/
void solve()
{
int ans=0;
// After xor -> 0000 or 000..1...00 -> total 27
map<int,int> m;
ip(n); vector<pair<string, int>> v;
ff(i,0,n)
{
sip(s); vi cnt(26,0);
ff(j,0,s.length()) cnt[s[j]-'a'] = (cnt[s[j]-'a']%2 + 1 )%2 ;
int mask = 0 ;
ff(j,0,26)
{
if(cnt[j]) mask+=(1LL << j);
}
ans+=m[mask]; // same waale so that 000000..00
// else kisi ek bit pe diifer karne waale
for(int flipme=0;flipme<26;flipme++)
{
mask^=( 1LL<< flipme );
ans+=m[mask];
mask^=( 1LL<< flipme);
}
m[mask]++;
}
pt(ans);
return;
}
/* ----------------------------------- MAIN --------------------------------------*/
signed main()
{
need_for_speed;
int t=1;
// cin>>t;
while (t--)
{
solve();
}
}
/* ----------------------------------- SAMPLE TC --------------------------------------
*/
/* ----------------------------------- THINK OF -------------------------------------
BINARY SEARCH !!
111100000 or 0000001111 -> BS
dp[N][2] last liya ya nahi ya uska left liya , ya koi ek case liya ( 2 kaam kr skte the us index pe )
koi range Query ho toh seg tree || 2 pointers
1 != 1LL So
*/
1698A - XOR Mixup | 1702E - Split Into Two Sets |
1703B - ICPC Balloons | 1702F - Equate Multisets |
1700A - Optimal Path | 665C - Simple Strings |
1708A - Difference Operations | 1703E - Mirror Grid |
1042A - Benches | 1676B - Equal Candies |
1705B - Mark the Dust Sweeper | 1711A - Perfect Permutation |
1701B - Permutation | 1692A - Marathon |
1066A - Vova and Train | 169B - Replacing Digits |
171D - Broken checker | 380C - Sereja and Brackets |
1281B - Azamon Web Services | 1702A - Round Down the Price |
1681C - Double Sort | 12A - Super Agent |
1709A - Three Doors | 1680C - Binary String |
1684B - Z mod X = C | 1003A - Polycarp's Pockets |
1691B - Shoe Shuffling | 1706A - Another String Minimization Problem |
1695B - Circle Game | 1702B - Polycarp Writes a String from Memory |